mailing list of musl libc
 help / color / mirror / code / Atom feed
f77f9d1f5d1382c3be522216c4915774aa8fefb4 blob 1621 bytes (raw)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
 
#include <string.h>
#include <elf.h>
#include <endian.h>

#if __BYTE_ORDER == __LITTLE_ENDIAN
#define ENDIAN_SUFFIX "el"
#else
#define ENDIAN_SUFFIX ""
#endif

#ifdef __mips_soft_float
#define FP_SUFFIX "-sf"
#else
#define FP_SUFFIX ""
#endif

#define LDSO_ARCH "mips" ENDIAN_SUFFIX FP_SUFFIX

#define TPOFF_K (-0x7000)

#define REL_SYM_OR_REL  R_MIPS_REL32
#define REL_PLT         R_MIPS_JUMP_SLOT
#define REL_COPY        R_MIPS_COPY
#define REL_DTPMOD      R_MIPS_TLS_DTPMOD32
#define REL_DTPOFF      R_MIPS_TLS_DTPREL32
#define REL_TPOFF       R_MIPS_TLS_TPREL32

static void do_relocs(struct dso *dso, size_t *rel, size_t rel_size, size_t stride);

static void do_arch_relocs(struct dso *this, struct dso *head)
{
	unsigned char *base = this->base;
	size_t *dynv = this->dynv;
	size_t dyn[20] = {0};
	size_t i;
	size_t rel[2], got=0;
	Sym *sym;

	for (i=0; dynv[i]; i+=2) {
		if (dynv[i]-0x70000000UL<20)
			dyn[dynv[i]&31] = dynv[i+1];
		else if (dynv[i] == DT_PLTGOT)
			got = dynv[i+1];
	}
	i = dyn[DT_MIPS_LOCAL_GOTNO-0x70000000];
	if (this->rel_early_relative) {
		got += sizeof(size_t) * i;
	} else {
		for (; i; i--, got+=sizeof(size_t))
			*(size_t *)(base+got) += (size_t)base;
	}
	sym = this->syms + dyn[DT_MIPS_GOTSYM-0x70000000];
	i = dyn[DT_MIPS_SYMTABNO-0x70000000] - dyn[DT_MIPS_GOTSYM-0x70000000];
	for (; i; i--, got+=sizeof(size_t), sym++) {
		rel[0] = got;
		rel[1] = sym-this->syms << 8 | R_MIPS_JUMP_SLOT;
		do_relocs(this, rel, sizeof rel, 2);
	}
}

#define NEED_MIPS_GOT_RELOCS
#define NEED_ARCH_RELOCS 1
#define DYNAMIC_IS_RO 1
#define ARCH_SYM_REJECT_UND(s) (!((s)->st_other & STO_MIPS_PLT))
debug log:

solving f77f9d1 ...
found f77f9d1 in https://inbox.vuxu.org/musl/20150411202152.GO6817@brightrain.aerifal.cx/
found 4b81d32 in https://git.vuxu.org/mirror/musl/
preparing index
index prepared:
100644 4b81d328612f059f9dc9561c09d6dbadb4ff5142	arch/mips/reloc.h

applying [1/1] https://inbox.vuxu.org/musl/20150411202152.GO6817@brightrain.aerifal.cx/
diff --git a/arch/mips/reloc.h b/arch/mips/reloc.h
index 4b81d32..f77f9d1 100644

Checking patch arch/mips/reloc.h...
Applied patch arch/mips/reloc.h cleanly.

index at:
100644 f77f9d1f5d1382c3be522216c4915774aa8fefb4	arch/mips/reloc.h

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/musl/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).