Skip to main content

Building Open Source Software and the GNU Standard C Library (Lab 4 Part 2)

To download and build the glibc was quite simple thanks to the guide provided by Chris here. The main steps (provided by the article) are:

1) mkdir $HOME/src
2) cd $HOME/src
3) git clone git://sourceware.org/git/glibc.git
4) mkdir -p $HOME/build/glibc
5) cd $HOME/build/glibc
6) $HOME/src/glibc/configure --prefix=/usr
7) make

 This builds a fully functional glibc in the build directory which can be rebuilt anytime using the src directory. The c files present in the src directory must be altered to change the object files in the build directory. I made a small print program here that simply outputs a test message. When compiled with the installed system glibc it prints "hello world!" once. When compiled with my build of glibc it prints it twice due to the changes I made to the print.c file in the src directory. It is important to note that everytime the src directory is altrered in any way the build directory must be remade, and commenting out the proper code to test your code is VERY IMPORTANT. I had to rm -rf my directories a few times because I deleted important code to introduce a bug.

Override mechanisms: judging by the example here it appears to mean overwrtiting the previous application defintions with those that the system supports.

Multiarch mechanisms: "the capability of a system to install and run applications of multiple different binary targets on the same system."(Debian) In other words running a non-native application on a platform. Multiarch refers to the support the application has in this scenario.

Source by Debian here

Comments

Popular posts from this blog

Final Project Part 02 - Sha1 Function Enhancements

To try to squeeze out a bit more performance I attempted to some compiler optimizations. Unfortunately, due to the sheer complexity of the algorithm, I was unable to find other logic complexities to simplify. I tried some loop unrolling to make the compiler have to work a little less, some examples are here below: I made a graph to demonstrate the minute differences this makes in the test vectors below: At most a few millisecond difference is all that can be acquired, and this is only from the finalcount[] array as the digest array produces errors if not compiled in a loop along with other for loops in the code. To test this I simply altered the sha1.c code and ran the make file to see if the vectors passed or failed. As mentioned this is a compiler optimzation, in other words it is completed already, especially at the -O3 level where the benchmarking was done. I would not  recommend this change to be pushed upstream normally due to the insignificant time ch...

Inline Assembler (Lab 7)

Part 1 After given an Inline assembler version of the volume program I made in the last lab, I got some results that shocked me. After running it with the same 500,000,000 sample size It took only 1.2 seconds of computing time, which is better than even the best variant (bit-shifting) of the program I had made by over 50%. I answered some questions below to further my understanding: 1. What is another way of defining variables instead of the (type name register) format? This can be done using normal type variables as the compiler will automatically put values into registers. 2. For the line vol_int = (int16_t) (0.5 * 32767.0); should 32767 or 32768 be used? 32767 should be used because the int will round the value and 32768 is not in the int16_t range. 3. What does __asm__("dup v1.8h,w22"); do? The duplicate simply means copy the int value into a new vector register . This is for SIMD instructions. 4. What happens if we remove : "=r"(in_cursor) ...

Final Project Part 02 - Compiler Flags

As mentioned in Part 01 of the project a very noticeable and easy to apply optimization was the -O3 compiler flag as before there was no optimization done at all. This seemed like the -O3 flag was simply forgotten or overlooked, however as I attempted to apply the flag I came across some issues that were disguised by only applying minimal optimization. When I first added the flag to both the STATIC and #else macros in the Makefile I got this issue in the strdup.h file in deps/strdup: fatal error: expected identifier or '(' before '__extension__' After some research and code manipulation I have discovered there are many work arounds to this problem. For one, I could use a different Makefile for the Sha1 function such as in the development version, however this seems impractical and is more like a temporary band-aid solution. Secondly I could alter the strdup function is strdup.h so it does not share the same name as the same function present in string.h which I piece...