Several consistency nits, and don't define the get_*() macros twice.
This commit is contained in:
parent
d11034718e
commit
2c64d3be89
|
@ -27,7 +27,7 @@
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* $Id: md.c,v 1.10 1994/06/10 15:16:32 pk Exp $
|
* $Id: md.c,v 1.11 1995/01/17 06:41:43 mycroft Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
|
@ -58,9 +58,10 @@ unsigned char *addr;
|
||||||
return get_short(addr);
|
return get_short(addr);
|
||||||
case 2:
|
case 2:
|
||||||
return get_long(addr);
|
return get_long(addr);
|
||||||
|
default:
|
||||||
|
errx(1, "Unsupported relocation size: %x",
|
||||||
|
RELOC_TARGET_SIZE(rp));
|
||||||
}
|
}
|
||||||
errx(1, "Unsupported relocation size: %x", RELOC_TARGET_SIZE(rp));
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -76,15 +77,17 @@ int relocatable_output;
|
||||||
switch (RELOC_TARGET_SIZE(rp)) {
|
switch (RELOC_TARGET_SIZE(rp)) {
|
||||||
case 0:
|
case 0:
|
||||||
put_byte(addr, relocation);
|
put_byte(addr, relocation);
|
||||||
return;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
put_short(addr, relocation);
|
put_short(addr, relocation);
|
||||||
return;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
put_long(addr, relocation);
|
put_long(addr, relocation);
|
||||||
return;
|
break;
|
||||||
|
default:
|
||||||
|
errx(1, "Unsupported relocation size: %x",
|
||||||
|
RELOC_TARGET_SIZE(rp));
|
||||||
}
|
}
|
||||||
errx(1, "Unsupported relocation size: %x", RELOC_TARGET_SIZE(rp));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -257,7 +260,7 @@ int magic, flags;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* TEXT_START depends on the value of outheader.a_entry. */
|
/* TEXT_START depends on the value of outheader.a_entry. */
|
||||||
if (!(link_mode & SHAREABLE)) /*WAS: if (entry_symbol) */
|
if (!(link_mode & SHAREABLE))
|
||||||
hp->a_entry = PAGSIZ;
|
hp->a_entry = PAGSIZ;
|
||||||
}
|
}
|
||||||
#endif /* RTLD */
|
#endif /* RTLD */
|
||||||
|
@ -305,15 +308,15 @@ int n;
|
||||||
for (; n; n--, r++) {
|
for (; n; n--, r++) {
|
||||||
r->r_address = md_swap_long(r->r_address);
|
r->r_address = md_swap_long(r->r_address);
|
||||||
bits = ((int *)r)[1];
|
bits = ((int *)r)[1];
|
||||||
r->r_symbolnum = md_swap_long(bits & 0xffffff00);
|
r->r_symbolnum = md_swap_long(bits) & 0x00ffffff;
|
||||||
r->r_pcrel = (bits & 1);
|
r->r_pcrel = (bits & 1);
|
||||||
r->r_length = ((bits >> 1) & 3);
|
r->r_length = (bits >> 1) & 3;
|
||||||
r->r_extern = ((bits >> 3) & 1);
|
r->r_extern = (bits >> 3) & 1;
|
||||||
r->r_baserel = ((bits >> 4) & 1);
|
r->r_baserel = (bits >> 4) & 1;
|
||||||
r->r_jmptable = ((bits >> 5) & 1);
|
r->r_jmptable = (bits >> 5) & 1;
|
||||||
r->r_relative = ((bits >> 6) & 1);
|
r->r_relative = (bits >> 6) & 1;
|
||||||
#ifdef N_SIZE
|
#ifdef N_SIZE
|
||||||
r->r_copy = ((bits >> 7) & 1);
|
r->r_copy = (bits >> 7) & 1;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -327,15 +330,15 @@ int n;
|
||||||
|
|
||||||
for (; n; n--, r++) {
|
for (; n; n--, r++) {
|
||||||
r->r_address = md_swap_long(r->r_address);
|
r->r_address = md_swap_long(r->r_address);
|
||||||
bits = (md_swap_long(r->r_symbolnum) & 0xffffff00);
|
bits = md_swap_long(r->r_symbolnum) & 0xffffff00;
|
||||||
bits |= (r->r_pcrel & 1);
|
bits |= (r->r_pcrel & 1);
|
||||||
bits |= ((r->r_length << 1) & 6);
|
bits |= (r->r_length & 3) << 1;
|
||||||
bits |= ((r->r_extern << 3) & 8);
|
bits |= (r->r_extern & 1) << 3;
|
||||||
bits |= ((r->r_baserel << 4) & 0x10);
|
bits |= (r->r_baserel & 1) << 4;
|
||||||
bits |= ((r->r_jmptable << 5) & 0x20);
|
bits |= (r->r_jmptable & 1) << 5;
|
||||||
bits |= ((r->r_relative << 6) & 0x40);
|
bits |= (r->r_relative & 1) << 6;
|
||||||
#ifdef N_SIZE
|
#ifdef N_SIZE
|
||||||
bits |= ((r->r_copy << 7) & 0x80);
|
bits |= (r->r_copy & 1) << 7;
|
||||||
#endif
|
#endif
|
||||||
((int *)r)[1] = bits;
|
((int *)r)[1] = bits;
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,14 +27,12 @@
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* $Id: md.h,v 1.8 1994/04/07 19:43:38 pk Exp $
|
* $Id: md.h,v 1.9 1995/01/17 06:41:45 mycroft Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#if defined(CROSS_LINKER) && defined(XHOST) && XHOST==sparc
|
#if defined(CROSS_LINKER) && defined(XHOST) && XHOST==sparc
|
||||||
|
|
||||||
#define NEED_SWAP
|
#define NEED_SWAP
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define MAX_ALIGNMENT (sizeof (long))
|
#define MAX_ALIGNMENT (sizeof (long))
|
||||||
|
@ -144,6 +142,34 @@ typedef struct jmpslot {
|
||||||
|
|
||||||
#ifdef CROSS_LINKER
|
#ifdef CROSS_LINKER
|
||||||
|
|
||||||
|
#define get_byte(p) ( ((unsigned char *)(p))[0] )
|
||||||
|
|
||||||
|
#define get_short(p) ( ( ((unsigned char *)(p))[0] << 8) | \
|
||||||
|
( ((unsigned char *)(p))[1] ) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define get_long(p) ( ( ((unsigned char *)(p))[0] << 24) | \
|
||||||
|
( ((unsigned char *)(p))[1] << 16) | \
|
||||||
|
( ((unsigned char *)(p))[2] << 8 ) | \
|
||||||
|
( ((unsigned char *)(p))[3] ) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define put_byte(p, v) { ((unsigned char *)(p))[0] = ((unsigned long)(v)); }
|
||||||
|
|
||||||
|
#define put_short(p, v) { ((unsigned char *)(p))[0] = \
|
||||||
|
((((unsigned long)(v)) >> 8) & 0xff); \
|
||||||
|
((unsigned char *)(p))[1] = \
|
||||||
|
((((unsigned long)(v)) ) & 0xff); }
|
||||||
|
|
||||||
|
#define put_long(p, v) { ((unsigned char *)(p))[0] = \
|
||||||
|
((((unsigned long)(v)) >> 24) & 0xff); \
|
||||||
|
((unsigned char *)(p))[1] = \
|
||||||
|
((((unsigned long)(v)) >> 16) & 0xff); \
|
||||||
|
((unsigned char *)(p))[2] = \
|
||||||
|
((((unsigned long)(v)) >> 8) & 0xff); \
|
||||||
|
((unsigned char *)(p))[3] = \
|
||||||
|
((((unsigned long)(v)) ) & 0xff); }
|
||||||
|
|
||||||
#ifdef NEED_SWAP
|
#ifdef NEED_SWAP
|
||||||
|
|
||||||
/* Define IO byte swapping routines */
|
/* Define IO byte swapping routines */
|
||||||
|
@ -177,67 +203,11 @@ void md_swapout_jmpslot __P((jmpslot_t *, int));
|
||||||
#define md_swap_long(x) ( (((x) >> 24) & 0xff ) | (((x) >> 8 ) & 0xff00 ) | \
|
#define md_swap_long(x) ( (((x) >> 24) & 0xff ) | (((x) >> 8 ) & 0xff00 ) | \
|
||||||
(((x) << 8 ) & 0xff0000) | (((x) << 24) & 0xff000000))
|
(((x) << 8 ) & 0xff0000) | (((x) << 24) & 0xff000000))
|
||||||
|
|
||||||
#define get_byte(p) ( ((unsigned char *)(p))[0] )
|
|
||||||
|
|
||||||
#define get_short(p) ( ( ((unsigned char *)(p))[1] << 8) | \
|
|
||||||
( ((unsigned char *)(p))[0] ) \
|
|
||||||
)
|
|
||||||
#define get_long(p) ( ( ((unsigned char *)(p))[3] << 24) | \
|
|
||||||
( ((unsigned char *)(p))[2] << 16) | \
|
|
||||||
( ((unsigned char *)(p))[1] << 8 ) | \
|
|
||||||
( ((unsigned char *)(p))[0] ) \
|
|
||||||
)
|
|
||||||
|
|
||||||
#define put_byte(p, v) { ((unsigned char *)(p))[0] = ((unsigned long)(v)); }
|
|
||||||
|
|
||||||
#define put_short(p, v) { ((unsigned char *)(p))[1] = \
|
|
||||||
((((unsigned long)(v)) >> 8) & 0xff); \
|
|
||||||
((unsigned char *)(p))[0] = \
|
|
||||||
((((unsigned long)(v)) ) & 0xff); }
|
|
||||||
|
|
||||||
#define put_long(p, v) { ((unsigned char *)(p))[3] = \
|
|
||||||
((((unsigned long)(v)) >> 24) & 0xff); \
|
|
||||||
((unsigned char *)(p))[2] = \
|
|
||||||
((((unsigned long)(v)) >> 16) & 0xff); \
|
|
||||||
((unsigned char *)(p))[1] = \
|
|
||||||
((((unsigned long)(v)) >> 8) & 0xff); \
|
|
||||||
((unsigned char *)(p))[0] = \
|
|
||||||
((((unsigned long)(v)) ) & 0xff); }
|
|
||||||
|
|
||||||
#else /* We need not swap, but must pay attention to alignment: */
|
#else /* We need not swap, but must pay attention to alignment: */
|
||||||
|
|
||||||
#define md_swap_short(x) (x)
|
#define md_swap_short(x) (x)
|
||||||
#define md_swap_long(x) (x)
|
#define md_swap_long(x) (x)
|
||||||
|
|
||||||
#define get_byte(p) ( ((unsigned char *)(p))[0] )
|
|
||||||
|
|
||||||
#define get_short(p) ( ( ((unsigned char *)(p))[0] << 8) | \
|
|
||||||
( ((unsigned char *)(p))[1] ) \
|
|
||||||
)
|
|
||||||
|
|
||||||
#define get_long(p) ( ( ((unsigned char *)(p))[0] << 24) | \
|
|
||||||
( ((unsigned char *)(p))[1] << 16) | \
|
|
||||||
( ((unsigned char *)(p))[2] << 8 ) | \
|
|
||||||
( ((unsigned char *)(p))[3] ) \
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
#define put_byte(p, v) { ((unsigned char *)(p))[0] = ((unsigned long)(v)); }
|
|
||||||
|
|
||||||
#define put_short(p, v) { ((unsigned char *)(p))[0] = \
|
|
||||||
((((unsigned long)(v)) >> 8) & 0xff); \
|
|
||||||
((unsigned char *)(p))[1] = \
|
|
||||||
((((unsigned long)(v)) ) & 0xff); }
|
|
||||||
|
|
||||||
#define put_long(p, v) { ((unsigned char *)(p))[0] = \
|
|
||||||
((((unsigned long)(v)) >> 24) & 0xff); \
|
|
||||||
((unsigned char *)(p))[1] = \
|
|
||||||
((((unsigned long)(v)) >> 16) & 0xff); \
|
|
||||||
((unsigned char *)(p))[2] = \
|
|
||||||
((((unsigned long)(v)) >> 8) & 0xff); \
|
|
||||||
((unsigned char *)(p))[3] = \
|
|
||||||
((((unsigned long)(v)) ) & 0xff); }
|
|
||||||
|
|
||||||
#endif /* NEED_SWAP */
|
#endif /* NEED_SWAP */
|
||||||
|
|
||||||
#else /* Not a cross linker: use native */
|
#else /* Not a cross linker: use native */
|
||||||
|
@ -254,4 +224,3 @@ void md_swapout_jmpslot __P((jmpslot_t *, int));
|
||||||
#define put_long(where,what) (*(long *)(where) = (what))
|
#define put_long(where,what) (*(long *)(where) = (what))
|
||||||
|
|
||||||
#endif /* CROSS_LINKER */
|
#endif /* CROSS_LINKER */
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* $Id: md.c,v 1.10 1994/06/10 15:16:32 pk Exp $
|
* $Id: md.c,v 1.11 1995/01/17 06:41:43 mycroft Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
|
@ -58,9 +58,10 @@ unsigned char *addr;
|
||||||
return get_short(addr);
|
return get_short(addr);
|
||||||
case 2:
|
case 2:
|
||||||
return get_long(addr);
|
return get_long(addr);
|
||||||
|
default:
|
||||||
|
errx(1, "Unsupported relocation size: %x",
|
||||||
|
RELOC_TARGET_SIZE(rp));
|
||||||
}
|
}
|
||||||
errx(1, "Unsupported relocation size: %x", RELOC_TARGET_SIZE(rp));
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -76,15 +77,17 @@ int relocatable_output;
|
||||||
switch (RELOC_TARGET_SIZE(rp)) {
|
switch (RELOC_TARGET_SIZE(rp)) {
|
||||||
case 0:
|
case 0:
|
||||||
put_byte(addr, relocation);
|
put_byte(addr, relocation);
|
||||||
return;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
put_short(addr, relocation);
|
put_short(addr, relocation);
|
||||||
return;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
put_long(addr, relocation);
|
put_long(addr, relocation);
|
||||||
return;
|
break;
|
||||||
|
default:
|
||||||
|
errx(1, "Unsupported relocation size: %x",
|
||||||
|
RELOC_TARGET_SIZE(rp));
|
||||||
}
|
}
|
||||||
errx(1, "Unsupported relocation size: %x", RELOC_TARGET_SIZE(rp));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -257,7 +260,7 @@ int magic, flags;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* TEXT_START depends on the value of outheader.a_entry. */
|
/* TEXT_START depends on the value of outheader.a_entry. */
|
||||||
if (!(link_mode & SHAREABLE)) /*WAS: if (entry_symbol) */
|
if (!(link_mode & SHAREABLE))
|
||||||
hp->a_entry = PAGSIZ;
|
hp->a_entry = PAGSIZ;
|
||||||
}
|
}
|
||||||
#endif /* RTLD */
|
#endif /* RTLD */
|
||||||
|
@ -305,15 +308,15 @@ int n;
|
||||||
for (; n; n--, r++) {
|
for (; n; n--, r++) {
|
||||||
r->r_address = md_swap_long(r->r_address);
|
r->r_address = md_swap_long(r->r_address);
|
||||||
bits = ((int *)r)[1];
|
bits = ((int *)r)[1];
|
||||||
r->r_symbolnum = md_swap_long(bits & 0xffffff00);
|
r->r_symbolnum = md_swap_long(bits) & 0x00ffffff;
|
||||||
r->r_pcrel = (bits & 1);
|
r->r_pcrel = (bits & 1);
|
||||||
r->r_length = ((bits >> 1) & 3);
|
r->r_length = (bits >> 1) & 3;
|
||||||
r->r_extern = ((bits >> 3) & 1);
|
r->r_extern = (bits >> 3) & 1;
|
||||||
r->r_baserel = ((bits >> 4) & 1);
|
r->r_baserel = (bits >> 4) & 1;
|
||||||
r->r_jmptable = ((bits >> 5) & 1);
|
r->r_jmptable = (bits >> 5) & 1;
|
||||||
r->r_relative = ((bits >> 6) & 1);
|
r->r_relative = (bits >> 6) & 1;
|
||||||
#ifdef N_SIZE
|
#ifdef N_SIZE
|
||||||
r->r_copy = ((bits >> 7) & 1);
|
r->r_copy = (bits >> 7) & 1;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -327,15 +330,15 @@ int n;
|
||||||
|
|
||||||
for (; n; n--, r++) {
|
for (; n; n--, r++) {
|
||||||
r->r_address = md_swap_long(r->r_address);
|
r->r_address = md_swap_long(r->r_address);
|
||||||
bits = (md_swap_long(r->r_symbolnum) & 0xffffff00);
|
bits = md_swap_long(r->r_symbolnum) & 0xffffff00;
|
||||||
bits |= (r->r_pcrel & 1);
|
bits |= (r->r_pcrel & 1);
|
||||||
bits |= ((r->r_length << 1) & 6);
|
bits |= (r->r_length & 3) << 1;
|
||||||
bits |= ((r->r_extern << 3) & 8);
|
bits |= (r->r_extern & 1) << 3;
|
||||||
bits |= ((r->r_baserel << 4) & 0x10);
|
bits |= (r->r_baserel & 1) << 4;
|
||||||
bits |= ((r->r_jmptable << 5) & 0x20);
|
bits |= (r->r_jmptable & 1) << 5;
|
||||||
bits |= ((r->r_relative << 6) & 0x40);
|
bits |= (r->r_relative & 1) << 6;
|
||||||
#ifdef N_SIZE
|
#ifdef N_SIZE
|
||||||
bits |= ((r->r_copy << 7) & 0x80);
|
bits |= (r->r_copy & 1) << 7;
|
||||||
#endif
|
#endif
|
||||||
((int *)r)[1] = bits;
|
((int *)r)[1] = bits;
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,14 +27,12 @@
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* $Id: md.h,v 1.8 1994/04/07 19:43:38 pk Exp $
|
* $Id: md.h,v 1.9 1995/01/17 06:41:45 mycroft Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#if defined(CROSS_LINKER) && defined(XHOST) && XHOST==sparc
|
#if defined(CROSS_LINKER) && defined(XHOST) && XHOST==sparc
|
||||||
|
|
||||||
#define NEED_SWAP
|
#define NEED_SWAP
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define MAX_ALIGNMENT (sizeof (long))
|
#define MAX_ALIGNMENT (sizeof (long))
|
||||||
|
@ -144,6 +142,34 @@ typedef struct jmpslot {
|
||||||
|
|
||||||
#ifdef CROSS_LINKER
|
#ifdef CROSS_LINKER
|
||||||
|
|
||||||
|
#define get_byte(p) ( ((unsigned char *)(p))[0] )
|
||||||
|
|
||||||
|
#define get_short(p) ( ( ((unsigned char *)(p))[0] << 8) | \
|
||||||
|
( ((unsigned char *)(p))[1] ) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define get_long(p) ( ( ((unsigned char *)(p))[0] << 24) | \
|
||||||
|
( ((unsigned char *)(p))[1] << 16) | \
|
||||||
|
( ((unsigned char *)(p))[2] << 8 ) | \
|
||||||
|
( ((unsigned char *)(p))[3] ) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define put_byte(p, v) { ((unsigned char *)(p))[0] = ((unsigned long)(v)); }
|
||||||
|
|
||||||
|
#define put_short(p, v) { ((unsigned char *)(p))[0] = \
|
||||||
|
((((unsigned long)(v)) >> 8) & 0xff); \
|
||||||
|
((unsigned char *)(p))[1] = \
|
||||||
|
((((unsigned long)(v)) ) & 0xff); }
|
||||||
|
|
||||||
|
#define put_long(p, v) { ((unsigned char *)(p))[0] = \
|
||||||
|
((((unsigned long)(v)) >> 24) & 0xff); \
|
||||||
|
((unsigned char *)(p))[1] = \
|
||||||
|
((((unsigned long)(v)) >> 16) & 0xff); \
|
||||||
|
((unsigned char *)(p))[2] = \
|
||||||
|
((((unsigned long)(v)) >> 8) & 0xff); \
|
||||||
|
((unsigned char *)(p))[3] = \
|
||||||
|
((((unsigned long)(v)) ) & 0xff); }
|
||||||
|
|
||||||
#ifdef NEED_SWAP
|
#ifdef NEED_SWAP
|
||||||
|
|
||||||
/* Define IO byte swapping routines */
|
/* Define IO byte swapping routines */
|
||||||
|
@ -177,67 +203,11 @@ void md_swapout_jmpslot __P((jmpslot_t *, int));
|
||||||
#define md_swap_long(x) ( (((x) >> 24) & 0xff ) | (((x) >> 8 ) & 0xff00 ) | \
|
#define md_swap_long(x) ( (((x) >> 24) & 0xff ) | (((x) >> 8 ) & 0xff00 ) | \
|
||||||
(((x) << 8 ) & 0xff0000) | (((x) << 24) & 0xff000000))
|
(((x) << 8 ) & 0xff0000) | (((x) << 24) & 0xff000000))
|
||||||
|
|
||||||
#define get_byte(p) ( ((unsigned char *)(p))[0] )
|
|
||||||
|
|
||||||
#define get_short(p) ( ( ((unsigned char *)(p))[1] << 8) | \
|
|
||||||
( ((unsigned char *)(p))[0] ) \
|
|
||||||
)
|
|
||||||
#define get_long(p) ( ( ((unsigned char *)(p))[3] << 24) | \
|
|
||||||
( ((unsigned char *)(p))[2] << 16) | \
|
|
||||||
( ((unsigned char *)(p))[1] << 8 ) | \
|
|
||||||
( ((unsigned char *)(p))[0] ) \
|
|
||||||
)
|
|
||||||
|
|
||||||
#define put_byte(p, v) { ((unsigned char *)(p))[0] = ((unsigned long)(v)); }
|
|
||||||
|
|
||||||
#define put_short(p, v) { ((unsigned char *)(p))[1] = \
|
|
||||||
((((unsigned long)(v)) >> 8) & 0xff); \
|
|
||||||
((unsigned char *)(p))[0] = \
|
|
||||||
((((unsigned long)(v)) ) & 0xff); }
|
|
||||||
|
|
||||||
#define put_long(p, v) { ((unsigned char *)(p))[3] = \
|
|
||||||
((((unsigned long)(v)) >> 24) & 0xff); \
|
|
||||||
((unsigned char *)(p))[2] = \
|
|
||||||
((((unsigned long)(v)) >> 16) & 0xff); \
|
|
||||||
((unsigned char *)(p))[1] = \
|
|
||||||
((((unsigned long)(v)) >> 8) & 0xff); \
|
|
||||||
((unsigned char *)(p))[0] = \
|
|
||||||
((((unsigned long)(v)) ) & 0xff); }
|
|
||||||
|
|
||||||
#else /* We need not swap, but must pay attention to alignment: */
|
#else /* We need not swap, but must pay attention to alignment: */
|
||||||
|
|
||||||
#define md_swap_short(x) (x)
|
#define md_swap_short(x) (x)
|
||||||
#define md_swap_long(x) (x)
|
#define md_swap_long(x) (x)
|
||||||
|
|
||||||
#define get_byte(p) ( ((unsigned char *)(p))[0] )
|
|
||||||
|
|
||||||
#define get_short(p) ( ( ((unsigned char *)(p))[0] << 8) | \
|
|
||||||
( ((unsigned char *)(p))[1] ) \
|
|
||||||
)
|
|
||||||
|
|
||||||
#define get_long(p) ( ( ((unsigned char *)(p))[0] << 24) | \
|
|
||||||
( ((unsigned char *)(p))[1] << 16) | \
|
|
||||||
( ((unsigned char *)(p))[2] << 8 ) | \
|
|
||||||
( ((unsigned char *)(p))[3] ) \
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
#define put_byte(p, v) { ((unsigned char *)(p))[0] = ((unsigned long)(v)); }
|
|
||||||
|
|
||||||
#define put_short(p, v) { ((unsigned char *)(p))[0] = \
|
|
||||||
((((unsigned long)(v)) >> 8) & 0xff); \
|
|
||||||
((unsigned char *)(p))[1] = \
|
|
||||||
((((unsigned long)(v)) ) & 0xff); }
|
|
||||||
|
|
||||||
#define put_long(p, v) { ((unsigned char *)(p))[0] = \
|
|
||||||
((((unsigned long)(v)) >> 24) & 0xff); \
|
|
||||||
((unsigned char *)(p))[1] = \
|
|
||||||
((((unsigned long)(v)) >> 16) & 0xff); \
|
|
||||||
((unsigned char *)(p))[2] = \
|
|
||||||
((((unsigned long)(v)) >> 8) & 0xff); \
|
|
||||||
((unsigned char *)(p))[3] = \
|
|
||||||
((((unsigned long)(v)) ) & 0xff); }
|
|
||||||
|
|
||||||
#endif /* NEED_SWAP */
|
#endif /* NEED_SWAP */
|
||||||
|
|
||||||
#else /* Not a cross linker: use native */
|
#else /* Not a cross linker: use native */
|
||||||
|
@ -254,4 +224,3 @@ void md_swapout_jmpslot __P((jmpslot_t *, int));
|
||||||
#define put_long(where,what) (*(long *)(where) = (what))
|
#define put_long(where,what) (*(long *)(where) = (what))
|
||||||
|
|
||||||
#endif /* CROSS_LINKER */
|
#endif /* CROSS_LINKER */
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* $Id: md.c,v 1.10 1994/06/10 15:16:32 pk Exp $
|
* $Id: md.c,v 1.11 1995/01/17 06:41:43 mycroft Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
|
@ -58,9 +58,10 @@ unsigned char *addr;
|
||||||
return get_short(addr);
|
return get_short(addr);
|
||||||
case 2:
|
case 2:
|
||||||
return get_long(addr);
|
return get_long(addr);
|
||||||
|
default:
|
||||||
|
errx(1, "Unsupported relocation size: %x",
|
||||||
|
RELOC_TARGET_SIZE(rp));
|
||||||
}
|
}
|
||||||
errx(1, "Unsupported relocation size: %x", RELOC_TARGET_SIZE(rp));
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -76,15 +77,17 @@ int relocatable_output;
|
||||||
switch (RELOC_TARGET_SIZE(rp)) {
|
switch (RELOC_TARGET_SIZE(rp)) {
|
||||||
case 0:
|
case 0:
|
||||||
put_byte(addr, relocation);
|
put_byte(addr, relocation);
|
||||||
return;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
put_short(addr, relocation);
|
put_short(addr, relocation);
|
||||||
return;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
put_long(addr, relocation);
|
put_long(addr, relocation);
|
||||||
return;
|
break;
|
||||||
|
default:
|
||||||
|
errx(1, "Unsupported relocation size: %x",
|
||||||
|
RELOC_TARGET_SIZE(rp));
|
||||||
}
|
}
|
||||||
errx(1, "Unsupported relocation size: %x", RELOC_TARGET_SIZE(rp));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -257,7 +260,7 @@ int magic, flags;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* TEXT_START depends on the value of outheader.a_entry. */
|
/* TEXT_START depends on the value of outheader.a_entry. */
|
||||||
if (!(link_mode & SHAREABLE)) /*WAS: if (entry_symbol) */
|
if (!(link_mode & SHAREABLE))
|
||||||
hp->a_entry = PAGSIZ;
|
hp->a_entry = PAGSIZ;
|
||||||
}
|
}
|
||||||
#endif /* RTLD */
|
#endif /* RTLD */
|
||||||
|
@ -305,15 +308,15 @@ int n;
|
||||||
for (; n; n--, r++) {
|
for (; n; n--, r++) {
|
||||||
r->r_address = md_swap_long(r->r_address);
|
r->r_address = md_swap_long(r->r_address);
|
||||||
bits = ((int *)r)[1];
|
bits = ((int *)r)[1];
|
||||||
r->r_symbolnum = md_swap_long(bits & 0xffffff00);
|
r->r_symbolnum = md_swap_long(bits) & 0x00ffffff;
|
||||||
r->r_pcrel = (bits & 1);
|
r->r_pcrel = (bits & 1);
|
||||||
r->r_length = ((bits >> 1) & 3);
|
r->r_length = (bits >> 1) & 3;
|
||||||
r->r_extern = ((bits >> 3) & 1);
|
r->r_extern = (bits >> 3) & 1;
|
||||||
r->r_baserel = ((bits >> 4) & 1);
|
r->r_baserel = (bits >> 4) & 1;
|
||||||
r->r_jmptable = ((bits >> 5) & 1);
|
r->r_jmptable = (bits >> 5) & 1;
|
||||||
r->r_relative = ((bits >> 6) & 1);
|
r->r_relative = (bits >> 6) & 1;
|
||||||
#ifdef N_SIZE
|
#ifdef N_SIZE
|
||||||
r->r_copy = ((bits >> 7) & 1);
|
r->r_copy = (bits >> 7) & 1;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -327,15 +330,15 @@ int n;
|
||||||
|
|
||||||
for (; n; n--, r++) {
|
for (; n; n--, r++) {
|
||||||
r->r_address = md_swap_long(r->r_address);
|
r->r_address = md_swap_long(r->r_address);
|
||||||
bits = (md_swap_long(r->r_symbolnum) & 0xffffff00);
|
bits = md_swap_long(r->r_symbolnum) & 0xffffff00;
|
||||||
bits |= (r->r_pcrel & 1);
|
bits |= (r->r_pcrel & 1);
|
||||||
bits |= ((r->r_length << 1) & 6);
|
bits |= (r->r_length & 3) << 1;
|
||||||
bits |= ((r->r_extern << 3) & 8);
|
bits |= (r->r_extern & 1) << 3;
|
||||||
bits |= ((r->r_baserel << 4) & 0x10);
|
bits |= (r->r_baserel & 1) << 4;
|
||||||
bits |= ((r->r_jmptable << 5) & 0x20);
|
bits |= (r->r_jmptable & 1) << 5;
|
||||||
bits |= ((r->r_relative << 6) & 0x40);
|
bits |= (r->r_relative & 1) << 6;
|
||||||
#ifdef N_SIZE
|
#ifdef N_SIZE
|
||||||
bits |= ((r->r_copy << 7) & 0x80);
|
bits |= (r->r_copy & 1) << 7;
|
||||||
#endif
|
#endif
|
||||||
((int *)r)[1] = bits;
|
((int *)r)[1] = bits;
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,14 +27,12 @@
|
||||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* $Id: md.h,v 1.8 1994/04/07 19:43:38 pk Exp $
|
* $Id: md.h,v 1.9 1995/01/17 06:41:45 mycroft Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#if defined(CROSS_LINKER) && defined(XHOST) && XHOST==sparc
|
#if defined(CROSS_LINKER) && defined(XHOST) && XHOST==sparc
|
||||||
|
|
||||||
#define NEED_SWAP
|
#define NEED_SWAP
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define MAX_ALIGNMENT (sizeof (long))
|
#define MAX_ALIGNMENT (sizeof (long))
|
||||||
|
@ -144,6 +142,34 @@ typedef struct jmpslot {
|
||||||
|
|
||||||
#ifdef CROSS_LINKER
|
#ifdef CROSS_LINKER
|
||||||
|
|
||||||
|
#define get_byte(p) ( ((unsigned char *)(p))[0] )
|
||||||
|
|
||||||
|
#define get_short(p) ( ( ((unsigned char *)(p))[0] << 8) | \
|
||||||
|
( ((unsigned char *)(p))[1] ) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define get_long(p) ( ( ((unsigned char *)(p))[0] << 24) | \
|
||||||
|
( ((unsigned char *)(p))[1] << 16) | \
|
||||||
|
( ((unsigned char *)(p))[2] << 8 ) | \
|
||||||
|
( ((unsigned char *)(p))[3] ) \
|
||||||
|
)
|
||||||
|
|
||||||
|
#define put_byte(p, v) { ((unsigned char *)(p))[0] = ((unsigned long)(v)); }
|
||||||
|
|
||||||
|
#define put_short(p, v) { ((unsigned char *)(p))[0] = \
|
||||||
|
((((unsigned long)(v)) >> 8) & 0xff); \
|
||||||
|
((unsigned char *)(p))[1] = \
|
||||||
|
((((unsigned long)(v)) ) & 0xff); }
|
||||||
|
|
||||||
|
#define put_long(p, v) { ((unsigned char *)(p))[0] = \
|
||||||
|
((((unsigned long)(v)) >> 24) & 0xff); \
|
||||||
|
((unsigned char *)(p))[1] = \
|
||||||
|
((((unsigned long)(v)) >> 16) & 0xff); \
|
||||||
|
((unsigned char *)(p))[2] = \
|
||||||
|
((((unsigned long)(v)) >> 8) & 0xff); \
|
||||||
|
((unsigned char *)(p))[3] = \
|
||||||
|
((((unsigned long)(v)) ) & 0xff); }
|
||||||
|
|
||||||
#ifdef NEED_SWAP
|
#ifdef NEED_SWAP
|
||||||
|
|
||||||
/* Define IO byte swapping routines */
|
/* Define IO byte swapping routines */
|
||||||
|
@ -177,67 +203,11 @@ void md_swapout_jmpslot __P((jmpslot_t *, int));
|
||||||
#define md_swap_long(x) ( (((x) >> 24) & 0xff ) | (((x) >> 8 ) & 0xff00 ) | \
|
#define md_swap_long(x) ( (((x) >> 24) & 0xff ) | (((x) >> 8 ) & 0xff00 ) | \
|
||||||
(((x) << 8 ) & 0xff0000) | (((x) << 24) & 0xff000000))
|
(((x) << 8 ) & 0xff0000) | (((x) << 24) & 0xff000000))
|
||||||
|
|
||||||
#define get_byte(p) ( ((unsigned char *)(p))[0] )
|
|
||||||
|
|
||||||
#define get_short(p) ( ( ((unsigned char *)(p))[1] << 8) | \
|
|
||||||
( ((unsigned char *)(p))[0] ) \
|
|
||||||
)
|
|
||||||
#define get_long(p) ( ( ((unsigned char *)(p))[3] << 24) | \
|
|
||||||
( ((unsigned char *)(p))[2] << 16) | \
|
|
||||||
( ((unsigned char *)(p))[1] << 8 ) | \
|
|
||||||
( ((unsigned char *)(p))[0] ) \
|
|
||||||
)
|
|
||||||
|
|
||||||
#define put_byte(p, v) { ((unsigned char *)(p))[0] = ((unsigned long)(v)); }
|
|
||||||
|
|
||||||
#define put_short(p, v) { ((unsigned char *)(p))[1] = \
|
|
||||||
((((unsigned long)(v)) >> 8) & 0xff); \
|
|
||||||
((unsigned char *)(p))[0] = \
|
|
||||||
((((unsigned long)(v)) ) & 0xff); }
|
|
||||||
|
|
||||||
#define put_long(p, v) { ((unsigned char *)(p))[3] = \
|
|
||||||
((((unsigned long)(v)) >> 24) & 0xff); \
|
|
||||||
((unsigned char *)(p))[2] = \
|
|
||||||
((((unsigned long)(v)) >> 16) & 0xff); \
|
|
||||||
((unsigned char *)(p))[1] = \
|
|
||||||
((((unsigned long)(v)) >> 8) & 0xff); \
|
|
||||||
((unsigned char *)(p))[0] = \
|
|
||||||
((((unsigned long)(v)) ) & 0xff); }
|
|
||||||
|
|
||||||
#else /* We need not swap, but must pay attention to alignment: */
|
#else /* We need not swap, but must pay attention to alignment: */
|
||||||
|
|
||||||
#define md_swap_short(x) (x)
|
#define md_swap_short(x) (x)
|
||||||
#define md_swap_long(x) (x)
|
#define md_swap_long(x) (x)
|
||||||
|
|
||||||
#define get_byte(p) ( ((unsigned char *)(p))[0] )
|
|
||||||
|
|
||||||
#define get_short(p) ( ( ((unsigned char *)(p))[0] << 8) | \
|
|
||||||
( ((unsigned char *)(p))[1] ) \
|
|
||||||
)
|
|
||||||
|
|
||||||
#define get_long(p) ( ( ((unsigned char *)(p))[0] << 24) | \
|
|
||||||
( ((unsigned char *)(p))[1] << 16) | \
|
|
||||||
( ((unsigned char *)(p))[2] << 8 ) | \
|
|
||||||
( ((unsigned char *)(p))[3] ) \
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
#define put_byte(p, v) { ((unsigned char *)(p))[0] = ((unsigned long)(v)); }
|
|
||||||
|
|
||||||
#define put_short(p, v) { ((unsigned char *)(p))[0] = \
|
|
||||||
((((unsigned long)(v)) >> 8) & 0xff); \
|
|
||||||
((unsigned char *)(p))[1] = \
|
|
||||||
((((unsigned long)(v)) ) & 0xff); }
|
|
||||||
|
|
||||||
#define put_long(p, v) { ((unsigned char *)(p))[0] = \
|
|
||||||
((((unsigned long)(v)) >> 24) & 0xff); \
|
|
||||||
((unsigned char *)(p))[1] = \
|
|
||||||
((((unsigned long)(v)) >> 16) & 0xff); \
|
|
||||||
((unsigned char *)(p))[2] = \
|
|
||||||
((((unsigned long)(v)) >> 8) & 0xff); \
|
|
||||||
((unsigned char *)(p))[3] = \
|
|
||||||
((((unsigned long)(v)) ) & 0xff); }
|
|
||||||
|
|
||||||
#endif /* NEED_SWAP */
|
#endif /* NEED_SWAP */
|
||||||
|
|
||||||
#else /* Not a cross linker: use native */
|
#else /* Not a cross linker: use native */
|
||||||
|
@ -254,4 +224,3 @@ void md_swapout_jmpslot __P((jmpslot_t *, int));
|
||||||
#define put_long(where,what) (*(long *)(where) = (what))
|
#define put_long(where,what) (*(long *)(where) = (what))
|
||||||
|
|
||||||
#endif /* CROSS_LINKER */
|
#endif /* CROSS_LINKER */
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue