https://sourceware.org/bugzilla/show_bug.cgi?id=31447

--- Comment #4 from Di Chen <dichen at redhat dot com> ---
@mjw

I have function dwelf_relocation_debug_sections() added in libdwelf.a.

```
$ pwd
/home/dichen/elfutils
$ eu-readelf -s libdwelf/libdwelf.a | grep dwelf_relocation_debug_sections
libdwelf/libdwelf.a(dwelf_relocation_debug_sections.o):
    1: 0000000000000000      0 FILE    LOCAL  DEFAULT      ABS
dwelf_relocation_debug_sections.c
  290: 000000000000077c   3783 FUNC    GLOBAL DEFAULT      126
dwelf_relocation_debug_sections

```

And I can call the new function in a test program:

```
#include <fcntl.h>
#include <gelf.h>
#include <libelf.h>
#include <stdio.h>
#include <unistd.h>

#include "libdwelf.h"


int main(int argc, char **argv) {
  const char *fname = argv[1];

  elf_version(EV_CURRENT);
  int fd = open(argv[1], O_RDWR);

  Elf *elf;
  elf = elf_begin(fd, ELF_C_RDWR, NULL);

  dwelf_relocation_debug_sections(elf, fname);
  elf_update(elf, ELF_C_WRITE);

  return 0;
}

// $ gcc reloc.c -l elf -l dwelf -l dw -l ebl -l ebl_backends -l cpu -L
../libcpu -L ../libebl -L ../backends -L ../libdwelf -I ../libdwelf -I ../libdw
-g -o reloc

```

Then, I am thinking of making strip.c use this
dwelf_relocation_debug_sections() so that I can reduce some code redundancy.

```
diff --git a/src/Makefile.am b/src/Makefile.am
index 1d592d4d..746c8817 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -43,6 +43,8 @@ if BUILD_STATIC
 libasm = ../libasm/libasm.a
 libdw = ../libdw/libdw.a -lz $(zip_LIBS) $(libelf) -ldl -lpthread
 libelf = ../libelf/libelf.a -lz $(zstd_LIBS)
+libebl = ../libebl/libebl.a ../backends/libebl_backends.a ../libcpu/libcpu.a
+libdwelf = ../libdwelf/libdwelf.a
 if LIBDEBUGINFOD
 libdebuginfod = ../debuginfod/libdebuginfod.a -lpthread $(libcurl_LIBS)
 else
@@ -60,6 +62,7 @@ endif
 endif
 libebl = ../libebl/libebl.a ../backends/libebl_backends.a ../libcpu/libcpu.a
 libeu = ../lib/libeu.a
+libdwelf = ../libdwelf/libdwelf.a

 if DEMANGLE
 demanglelib = -lstdc++
@@ -81,7 +84,7 @@ readelf_LDADD = $(libdw) $(libebl) $(libelf) $(libeu)
$(argp_LDADD)
 nm_LDADD = $(libdw) $(libebl) $(libelf) $(libeu) $(argp_LDADD) $(obstack_LIBS)
\
           $(demanglelib)
 size_LDADD = $(libelf) $(libeu) $(argp_LDADD)
-strip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(argp_LDADD)
+strip_LDADD = $(libebl) $(libelf) $(libdw) $(libeu) $(libdwelf) $(argp_LDADD)
 elflint_LDADD  = $(libebl) $(libdw) $(libelf) $(libeu) $(argp_LDADD)
 findtextrel_LDADD = $(libdw) $(libelf) $(libeu) $(argp_LDADD)
 addr2line_LDADD = $(libdw) $(libelf) $(libeu) $(argp_LDADD) $(demanglelib)
```

After the above Makefile.am change, still, elfutils building kept failing due
to some
 undefined reference error.

```
/usr/bin/ld: strip.o: in function `handle_debug_relocs':
/home/dichen/elfutils/src/strip.c:576: undefined reference to
`dwelf_relocation_debug_sections'
/usr/bin/ld: strip.o: in function `handle_elf':
/home/dichen/elfutils/src/strip.c:2123: undefined reference to
`dwelf_relocation_debug_sections'
collect2: error: ld returned 1 exit status
```

I believe I am missing something in the building process(Makefile.am,
Makefile.in, etc). But I don't have many clue now, could you please give a
look?

CC: @amerey

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Reply via email to