- Given that we tell the compiler that struct ip is packed and 32-bit

aligned, GCC 4.2.1 also generates code for sendudp() that assumes
  this alignment. GCC 4.2.1 however doesn't 32-bit align wbuf, causing
  the loader to crash due to an unaligned access of wbuf in sendudp()
  when netbooting sparc64. Solve this by specifying wbuf as packed and
  32-bit aligned, too. As for lastdata and readudp() this currently is
  no issue when compiled with GCC 4.2.1, though give lastdata the same
  treatment as wbuf for consistency and possibility of being affected
  in the future. [1]
- Sprinkle const on a lookup table.

Reported by:		marcel [1]
Submitted by:		yongari [1]
Reviewed by:		marcel [1]
MFC after:		5 days
This commit is contained in:
Marius Strobl 2007-10-21 17:03:18 +00:00
parent a6ef2fb2da
commit da65d6fe83

View File

@ -95,10 +95,10 @@ struct tftp_handle {
u_char header[HEADER_SIZE];
struct tftphdr t;
u_char space[RSPACE];
} lastdata;
} __packed __aligned(4) lastdata;
};
static int tftperrors[8] = {
static const int tftperrors[8] = {
0, /* ??? */
ENOENT,
EPERM,
@ -175,7 +175,7 @@ tftp_makereq(h)
u_char header[HEADER_SIZE];
struct tftphdr t;
u_char space[FNAME_SIZE + 6];
} wbuf;
} __packed __aligned(4) wbuf;
char *wtail;
int l;
ssize_t res;
@ -218,7 +218,7 @@ tftp_getnextblock(h)
struct {
u_char header[HEADER_SIZE];
struct tftphdr t;
} wbuf;
} __packed __aligned(4) wbuf;
char *wtail;
int res;
struct tftphdr *t;