This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [objcopy] relocation sections
- From: robertsong <robertsong2000 at gmail dot com>
- To: "Nick Clifton" <nickc at redhat dot com>
- Cc: binutils at sourceware dot org
- Date: Tue, 1 Jan 2008 19:46:29 +0900
- Subject: Re: [objcopy] relocation sections
- References: <1197043514.6875.25.camel@robertsong-laptop> <476BEA34.1060805@redhat.com>
nick, thanks for your reply.
2007/12/22, Nick Clifton <nickc@redhat.com>:
> Hi Robert,
>
> > I want to use objcopy to remove the useless sections from the object
> > file in order the shrink the library.
>
> Why ? Or more specifically, how can you know that they are useless ? Since
> you are creating a library rather than an executable, you cannot know which
> sections in which object files in the library will be needed by whatever
> application links against this library.
>
Well, I will search for all the applications in the target filesystem
and I want to remove the sections that are not used by these
applications. In this way, the size of the library can also be shrunk
as well as the applications.
Now libpng package has an application named as pngtest, and I used it
to take the test.
> > Now I am using libpng for example.
> > I add -ffunction-sections and -fdata-sections to CFLAGS of the Makefile
> > as to put every function into its own function.
> > But when I ran:
> > $objcopy -R .text.png_read_info pngread.o
> > BFD: stXXXXYNYHix: symbol `png_read_info' required but not present
> > objcopy: stXXXXYNYHix: No symbols
> > $objcopy -N png_read_info pngread.o
> > BFD: stXXXX8m8Nnh: symbol `png_read_info' required but not present
> > objcopy: stXXXX8m8Nnh: No symbols
> >
> > the comment of the error in bdf/elf.c is as bellow:
> > /* This case can occur when using --strip-symbol on a symbol
> > which is used in a relocation entry. */
> > So when I used --strip-all to remove all the symbols and relcation
> > informations of the object file.
> > This time the useless sections can be deleted.
> > But I don't want to remove all the symbols info, and I have no idea what
> > to do.
>
> Simple - do not try to remove these sections from the object files. Instead
> let the linker do it for you when you are creating your executable. Just add
> the --gc-sections option to the linker command line and it will take care of
> eliminating any unused sections from the resultant binary.
>
yes, I also added the --gc-sections option, but now I want to shrink
the library too.
Now I found out the error was generated when the symbol was used in
another relocation sections, and if I remove the relative section
firstly, and it will be OK.
Cheers
robert