summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Wemm <peter@FreeBSD.org>2001-09-04 23:04:48 +0000
committerPeter Wemm <peter@FreeBSD.org>2001-09-04 23:04:48 +0000
commit72d4bf59e9d6bd861f5a5016686969b56e47cc76 (patch)
treef20d1920cd581b06592f8f79a0599ac0cbef0599
parentcbab05248c1007561f436a9b9c960da05b0dc950 (diff)
Notes
-rw-r--r--gnu/usr.bin/as/as.h4
-rw-r--r--gnu/usr.bin/as/read.c28
-rw-r--r--gnu/usr.bin/as/read.h2
3 files changed, 32 insertions, 2 deletions
diff --git a/gnu/usr.bin/as/as.h b/gnu/usr.bin/as/as.h
index 6b81ac92ff91..4a6893bc119d 100644
--- a/gnu/usr.bin/as/as.h
+++ b/gnu/usr.bin/as/as.h
@@ -187,11 +187,11 @@ typedef enum _segT {
typedef int subsegT;
-COMMON subsegT now_subseg;
+COMMON subsegT now_subseg, prev_subseg;
/* What subseg we are accreting now? */
-COMMON segT now_seg;
+COMMON segT now_seg, prev_seg;
/* Segment our instructions emit to. */
/* Only OK values are SEG_TEXT or SEG_DATA. */
diff --git a/gnu/usr.bin/as/read.c b/gnu/usr.bin/as/read.c
index f25f3634c9b4..1b64ee6f1552 100644
--- a/gnu/usr.bin/as/read.c
+++ b/gnu/usr.bin/as/read.c
@@ -248,6 +248,7 @@ static const pseudo_typeS
{ "octa", big_cons, 16 },
{ "org", s_org, 0 },
{ "p2align", s_align_ptwo, 0 },
+ { "previous", s_previous, 0 },
#ifdef NO_LISTING
{ "psize", s_ignore, 0 }, /* set paper size */
#else
@@ -741,6 +742,9 @@ void
{
register int temp;
+ prev_seg = now_seg;
+ prev_subseg = now_subseg;
+
temp = get_absolute_expression();
subseg_new (SEG_DATA, (subsegT)temp);
@@ -750,6 +754,27 @@ void
demand_empty_rest_of_line();
}
+void
+ s_previous()
+{
+ segT oprev_seg = now_seg;
+ subsegT oprev_subseg = now_subseg;
+
+ oprev_seg = now_seg;
+ oprev_subseg = now_subseg;
+
+ subseg_new (prev_seg, prev_subseg);
+
+ prev_seg = oprev_seg;
+ prev_subseg = oprev_subseg;
+
+#ifdef OBJ_VMS
+ const_flag = 0;
+#endif /* not OBJ_VMS */
+ demand_empty_rest_of_line();
+}
+
+
/* Handle the .appfile pseudo-op. This is automatically generated by
do_scrub_next_char when a preprocessor # line comment is seen with
a file name. This default definition may be overridden by the
@@ -1313,6 +1338,9 @@ void
{
register int temp;
+ prev_seg = now_seg;
+ prev_subseg = now_subseg;
+
temp = get_absolute_expression();
subseg_new (SEG_TEXT, (subsegT)temp);
demand_empty_rest_of_line();
diff --git a/gnu/usr.bin/as/read.h b/gnu/usr.bin/as/read.h
index e396922b10b6..29d3dfc824a5 100644
--- a/gnu/usr.bin/as/read.h
+++ b/gnu/usr.bin/as/read.h
@@ -96,6 +96,7 @@ void s_ignore(int arg);
void s_include(int arg);
void s_lcomm(int needs_align);
void s_lsym(void);
+void s_previous(void);
void s_org(void);
void s_set(void);
void s_size(void);
@@ -138,6 +139,7 @@ void s_ignore();
void s_include();
void s_lcomm();
void s_lsym();
+void s_previous();
void s_org();
void s_set();
void s_size();