This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Section alignment not set when libbfd is built for all targets
- From: Anthony DeRosa <anthony at ransomed dot us>
- To: binutils at sourceware dot org
- Date: Thu, 29 Mar 2012 23:23:21 -0400
- Subject: Section alignment not set when libbfd is built for all targets
- References: <CAGbhoztqDQMxiF9-1YiTsBP4m7yVh9eDhQF7UoivxQdoFq=K+A@mail.gmail.com>
Hello all,
I am trying to build libbfd.a for *all* targets using the following commands:
tar -xjf binutils-2.21.1a.tar.bz2
cd binutils-2.21.1/bfd/
./configure --enable-targets=all --enable-64-bit-bfd
make
The build completes successfully, and I am able to link against the library.
The problem is, when I dump the section information of a given elf,
the alignment_power field of all sections is always zero (0). (Note
the other section fields I have checked are correct, i.e., vma, lma,
name, size, etc.).
This problem does not happen when I link with a version of libbfd that
was built as part of binutils with a specific target (or use the
libbfd installed on my operating system).
Am I building incorrectly?
Below is a very simple test program that demonstrates the problem.
Usage is: ./program_below <some_elf>
-------------------------------------------
#include <stdlib.h>
#include <stdint.h>
#include <stddef.h>
#include <stdio.h>
#include <string.h>
#include <bfd.h>
int
main (int argc, char **argv)
{
? ? bfd *abfd;
? ? char *filename = NULL;
? ? char **matching;
? ? asection* section;
? ? if (argc < 2) {
? ? ? ? exit(1);
? ? }
? ? filename = argv[1];
? ? abfd = bfd_openr (filename, NULL);
? ? if (abfd == NULL) {
? ? ? ? printf("Failed to open\n");
? ? ? ? exit(1);
? ? }
? ? if (!bfd_check_format_matches (abfd, bfd_object, &matching)) {
? ? ? ? if (bfd_get_error () == bfd_error_file_ambiguously_recognized) {
? ? ? ? ? ? //list_matching_formats (matching);
? ? ? ? ? ? free (matching);
? ? ? ? ? ? exit(1);
? ? ? ? }
? ? }
? ? section = abfd->sections;
? ? while (section != NULL) {
? ? ? ? printf("%s 2**%u\n", section->name, section->alignment_power);
? ? ? ? section = section->next;
? ? }
? ? return 0;
}
-------------------------------------------
Thanks,
Anthony