From 420f66261ad7bde3367ccb21c65c84656a7f2497 Mon Sep 17 00:00:00 2001
From: PEDRO MARTINS E SA <pmes18@urquell>
Date: Tue, 19 Nov 2019 10:22:47 -0300
Subject: [PATCH] Atualizacao: erro da inicializacao

---
 bin/meu_malloc.o    | Bin 5208 -> 5360 bytes
 lib/libmeu_malloc.a | Bin 5456 -> 5608 bytes
 pseudoc.c           |   8 +++--
 src/meu_malloc.s    |  41 ++++++++++++++----------
 src/teste.c         |  75 +++++++++++++++++++++-----------------------
 teste               | Bin 12840 -> 12952 bytes
 6 files changed, 65 insertions(+), 59 deletions(-)

diff --git a/bin/meu_malloc.o b/bin/meu_malloc.o
index 4624a10edc2614cd913e8515fb2c9c669ba68f99..1efa1bd405d3b867004aff8b8761dd9b01b345f9 100644
GIT binary patch
delta 1741
zcmZ{kUr19?9LLYurft`)yFc1msZ4Y=%Q^qRW`9se1`bUs`maUPSt_YpCQ&`in2>1?
z+0TdQp|T#Lmnbwy-})njB}GJ7DEd@ARA^u+33l$iKXn|~VfWti`+UE@-|y^P&K-Bo
zWM6mEncnOs{fJRRh(G$%Sb4Rf_fAWuKe|ZT6U(Eow8vkT_h=l1jq>O`X;1hrPkT}w
z1F5t?m7O7w-Bkzn`^tQFf7KyhrN7L_kU$(k_RFz5f_8zlHVR}O>eR(F9qy^~gbH^>
zMrO3aeXJ8csYl_qW`k-%1p(tac(1VuwRLswP;-4-ei8iAcpxL;ugx#@j2VUUTuo{q
zKhf$t5u-@cU8n{)u2fNzCXQD^IMHf5DAU;`%Bj`RpJ<KL$&`{?oT}8K<TJ-Fq5lWR
zuOVOLct7$cuKiPmN61l5c#8=hj!z*!%<*D5reu>!Hmuy{(0`xv&m#XK^T>*ytieLB
zxrB|#$2gvgJe_O29r-B7_aHBg<x+n?3P)lE#;cL{al9G%MUFQjzrpeI$cH)J#dsPa
zl-%WnPE2?PL)t5}4}3bSP1;5y^VY6zm^>SVu+Ccl9Mu<``j5p@ma>FZaTNX2a;H`P
z5&0jEPf45|q-3CiOVf7ltOs1ePF<+}bRgK+(hwL32(6S7c$eg$9+*pdLnnditv2~g
zv+~j(bhB%5Nf|Sen$H#{k0f@N99ktL${Qqv=Vfr&V5L#mXV?rU4cf?qIQcWkrJB--
zUhb-r02|A7m530L<3<#ckxLH`yO!&0Q8;`vm?C~IHwSa8;^bCy{^f5>FpfXU`E#*;
zm%>lU8yCB{hg?D)COnGMV2tzEp#MXxA12qj;f$z<^`f5UfI}=ynLyo+et|t*&@5Wh
zTx@1R>Wo#{+ztJr1+v5}7#FAM1PmFyy1jbElm`neN>wXS3v4raX*YyTCAw~8i!fyJ
zsyamYZ7PPxW-Sz%i|9=Vn@i{*JTaF*$fAXLbCIgl2nCj69Z67X?SKmwZ%QdfPJFJF
b*E3?-s%wxI&&F3+uy}<KzW)va!^ZUg4lD1`

delta 1527
zcmZ{kUr19?9LLYuc4har?Or$adLc<mYo;<Qb5t~u6kR1u0<*uAX;BX@Bzts*P?$xn
zAH7&)K}66?U<kelLPS~*^G!&|g2)Gn77>AgowNNWmmloM?)mfiet+k8cDVQatX>S>
z5AyD0^%c)s!^K#1WYsu2dM-K9ueXnFu3{qEN7mS&vNBoEcRPwTrm?DC@vAMb>Mhq;
z{IbS=!I(3`%V6GF?;1H0It4D*JfvKu{5@2t0f;HC2a2U!?du(g!#1T6PAk7pw9A!k
zu`e@rvconehY{o*gts8?BD@V|3rs7Pq3Lx_)GkODn2EC)%Go$k`;adaejWJ=;bX|V
zNSO)bt%Ofyd4g>v!W<?XB0QLxbLMws3>(d7^xq@?Psra9o<{yA!xJ0pFa--tlY~;_
z8Yx_fe2VZe@>;_8AaAjASwDL;oDJIr!H;9YMZ%9EA0qrb@)v{;AiqO+zu*dEoIMw>
z<}GVTObs!kaTjJ)(|UsHV<NwTv}#7b2`Y0hkaT&-l7A$82KiUQ=b%$-g-6<f$?w`F
z4lz$9Z-7D12fhF|Jf^jT#pNHV6VJc(Y^=f;kIA>gGp}jY<C4-7vU%dL;5B(dv^(In
z*KIA?e7kJEAJP|HLv@o-<VuEkGJ$6(y9V*(c2I&m=XYn_Y%e5zW^{j^tTvLB``}}F
z{BcP8OzT=6^&wQ~=E3ni>NKg9yL4vkei+n4-fG;t>^#tHgkV`W#Ql}l16GYqtHiM;
z`Wh%ROhu|YA*ly=aI(X2a*@<o7*<pAR78|QQq0`W?Cc~g6owr=PH0w2pxhr+dr<fT
zo&K<6#Rs?j5#9}R{wB^q4K(qa5EboH7!5QzUg|I(h^Q%XP0MJ6!lH1oTfELP{v!2>
baUGl~s!_#Forx4Ai^A%no}CSgEo}J@NDtpG

diff --git a/lib/libmeu_malloc.a b/lib/libmeu_malloc.a
index c0a3011798857345f00bccd609e9428b9a54909f..7acda28347d161f4c2d02e5220ed1e8c21b86684 100644
GIT binary patch
delta 1670
zcmZ{kT}TvB6vyw~4|PY|9d&D%GE;QJ&vs2%!)kR&!AX;hzRZeDB^CTAlc0!IR?4)8
z>_|oQQ1}qO1foF%Jw!!e84~qS6xxeeB)AWykYM-D9Buc4mz^{B{Qm!Q?wwiYPG-$!
z-<UJ!dp!g59y$-Hv^nmTY#~Go&dC+m8sRo=P1Ax)q%*24_%i0ii?V);i?C4^TqK>=
zS$*1{<QjFFwwp3jB~n^>@PNO>pQ2SB_E%^neugCCs%O8P6jyzUMB17pvIsR6A5Dh4
z7LQc!E>BGhmb;Jjz<bL$+_G+@Utz@Rkxtjux!YSBI`VeFjMWQj)Ivbx%Y}`6eQqYl
z!x*3Xke?Lz9^|zGH~N}Mv%o9#JhaST2pf_fc{l{!(TZB5=b`0QjFUPTiB<weGfF-S
z@+Cc|<d?v&BVQ8u1LVy#Qh1EKTHx;tzL$6fVG0Y52;8UVlx#IcF7O-uLog7d1ilDW
z(OC6H;G2+72z(pzWMP#;<l_S0hrHO}fz`cfC>#|EYLE{KyaoA1fj1$)Dew!(pGNRB
zLV8iSA0ZIZgZv4M*siLBER%_jR=3P2Lr^6t>KLl`A~ZstL${=8e;MVq#uolt#<6Nz
zX!{ZQAAwK7cd69UasHeaT(P@s?G0yY>zi5|Ye%bN+bAXQI?hGCFc<fhegpqHMb$rJ
zwj6&jH@lXWjWN$v=BIXr7V@Z;;7Z(?7v>B?o?U@cb{UH8G4vt#2Ij-O{7YTwYQpyy
z%UJlUbO>B#Iv-Bt{N`oXN}nvjAH&UTXa<J`d%RY;Ms1ByyK++0ui+0ul|xZ`*HDL{
z+o9}!w1zq%thI7leF*o%Cx=_jHXcBaaX9CPP7Z9A^VzXjB`2!6VV?9bPcB@R6)RWW
z5OO3!lAI2c@-#n8;|py2v7HA(EK4#Qg{_d6P+;maL#=fKbR}fi`cPPc5hipw;Aeu5
zUV+TSB6<g!SR8|47AN6HVv(s>hAgMgMyy7&op9D!u)Y|x47}U*4Lx&a+ZyrsoPm(D
Nz}AlcZWr6amVbbq`{Doq

delta 1519
zcmZ{kUr19?9LLYucJ=PgZFjp{*HMOr#?qP7%vpgWQk<(ms4NO1O^pIwiS_8TJ&8q*
z9}xuogNUG~Fa%#DB|@tQeG?MYAlQRNMns@s=iK{K=Lvu8-gADR@Ar3p=N`t%lunln
zeYaMIYtlc%^gQgL*Yn=1HbNRxOX|si%kYqPxnqO7iV2HYYK7dAGQ&YjrNyrhg%r23
zU#PIStxzF}YYO=VDO)WqfC*dJmO4>>5ms#<VN%Mcldvd-r5o*S-3i#4Qw?Wweg|TF
z$*eeR%&jC2ExG!!Q&|e1)}h)g@CGAaUgLYtjwYDN)dQw`c`aMv^GiTwJ=tzxN*0W9
z^K~0}W)m5+LFCPJtMC+gy}(D1?-lrz$>Zd>AOww^60c=zgLz!&zTp3Y`~xhq&v`4T
z60SBX@O<Qo(4`3Zh`=MrLjpgDyw2pwjXj&^KuMoaa1IMP1b!NMufSW7zZ7^k^1EBO
zgODy1Ua-HL1|g+~_QG>T58Pv1C6u&oY|)%Nff+?_e~s#dpnhXHuexHax+(H==KQn3
z$B=&&_!Q@mmVD6SC<AaD9iDewr4Vx#(JJV4exfrl?$iTw*nxjk8GBaO%vgf7Q>Xi&
z-=zn_xHR{aXL%B^=+bGDzhS|p!jMa*bMS_-ADmUJU>!Rn!fRFb7{L=3e5hj2de0qj
z)2$~Dp}Jlb;#L+%wyA0m{BhGxnzr#L1pfi__n5rnzimAb3c^_MXqyJ3f`9$W8O!!V
zr&><;!(&y4I!_VIs;Yew^+HH9Dtqz@N?9ijy9IGn*vNSaRCqKR9Ip3RDZA+!y%GB~
zKQb2iFu*d|YGxN;${V4rK((m771<wX)FPIQ3+`yO?EW3sqLcvjMd6($L(Er0pFzJb
zYI)^`312Pr`D9uRc7Mb#OXiw?@!oT>v<%MrOYQ7lHewnE{1Ii=ZDxH0;@;i=0M?7&
AegFUf

diff --git a/pseudoc.c b/pseudoc.c
index e7fee05..3947440 100644
--- a/pseudoc.c
+++ b/pseudoc.c
@@ -50,6 +50,8 @@ void aloca_espaco(void tam_alloc)
 
 void* alocaMem(int tam_alloc)
 {
+	
+	//se a heap n esta inicializada
 	if(piso_heap == 0)
 		iniciaAlocador();
 	
@@ -58,7 +60,7 @@ void* alocaMem(int tam_alloc)
 	while (endr <= teto_heap)
 	{
 		//endereco livre		
-		if((endr == LIVRE))
+		if((*endr == LIVRE))
 		{
 			if (8(endr) >= tam_alloc)
 			{			
@@ -72,7 +74,7 @@ void* alocaMem(int tam_alloc)
 			{
 				endr = teto_heap;
 				aloca_espaco(tam_alloc);
-				(endr) = 0;
+				(endr) = OCUPADO;
 				8(endr) = tam_alloc;			
 			}			
 			break;		
@@ -106,7 +108,7 @@ void arruma_heap()
 void liberaMem(*void bloco)
 {
 	//bloco livre	
-	-16(bloco) = 1;
+	-16(bloco) = livre;
 	arruma_heap();	
 
 	return;
diff --git a/src/meu_malloc.s b/src/meu_malloc.s
index 629b691..e884ab2 100644
--- a/src/meu_malloc.s
+++ b/src/meu_malloc.s
@@ -5,12 +5,13 @@
 	str2: .string "#"
 	str3: .string "-"
 	str4: .string "*"
-	str5: .string "INICIANDO O ALOCADOR\n"
+	str5: .string "INICIANDO O ALOCADOR!\n"
+	str6: .string "ENTRADA INVALIDA!\n"
 	pula_Linha: .string "\n"
 
-	flag: .string "%d"
+	flag: .string "%d"				#############APAGARRRRRRRR########## 
 	flaag: .string "%d, %d \n"		#############APAGARRRRRRRR########## 
-	oi: .string "oi\n"			#############APAGARRRRRRRR########## 
+	oi: .string "oi\n"				#############APAGARRRRRRRR########## 
 
 .section .bss
 	.equ ALOCADOR, 1040
@@ -36,20 +37,20 @@ iniciaAlocador:
 	movq $0, %rdi			# sbrk(0)
 	movq $12,%rax
 	syscall
-	
+
 	movq %rax, piso_heap	#piso_heap = inicio_heap
 	addq $ALOCADOR, %rax
 	movq %rax, teto_heap	#teto_heap = piso + alocador
-	
+
 	movq %rax, %rdi			#aloca o espaco reservado
 	movq $12, %rax
 	syscall	
 	
 	movq piso_heap, %rax
 	movq $LIVRE, (%rax)		#deixa livre o primeiro slot de memoria
-	movq $ALOCADOR, %r12
-	subq $16, %r12
-	movq %r12, 8(%rax)		#disponibiliza o tamanho do espaco alocado
+	movq $ALOCADOR, %r13
+	subq $16, %r13
+	movq %r13, 8(%rax)		#disponibiliza o tamanho do espaco alocado
 	
 	popq %rbp
 	ret
@@ -90,17 +91,25 @@ aloca_espaco:
 alocaMem:
 	pushq %rbp
 	movq %rsp, %rbp
-	subq $8, %rsp		#aloca espaco para endr	
+	subq $8, %rsp					#aloca espaco para endr	
 	
-	movq %rdi, %r12		#r12 = ponteiro alocado
-	movq piso_heap, %rbx
-	cmpq $0, %rbx
+	movq %rdi, %r12					#r12 = ponteiro alocado
+	cmpq $0, %r12
+	jne fim_pegadinha_if			#quando tam_alloc == 0 return
+		addq $8, %rsp
+		popq %rbp
+		ret
+	fim_pegadinha_if:
+	
+	movq piso_heap, %rax
+	cmpq $0, %rax
 	jne fim_if_aloca_mem	
-		call iniciaAlocador		 
+		call iniciaAlocador
 	fim_if_aloca_mem:
+	movq piso_heap, %rbx
 
 	movq %rbx,-8(%rbp)
-	movq -8(%rbp), %rbx			# endr = -8(rbp)
+	movq -8(%rbp), %rbx				# endr = -8(rbp)
 	while_loop_aloca_mem:
 	cmpq teto_heap, %rbx			#rbx = endr
 	jg fim_while_aloca_mem
@@ -112,7 +121,7 @@ alocaMem:
 				subq %r12, 8(%rbx)				
 				movq 8(%rbx), %r13
 				subq $16, %r12				
-				addq $16, %r13	#endr += 8(endr) + 16
+				addq $16, %r13		#endr += 8(endr) + 16
 				addq %r13, %rbx	
 				movq $OCUPADO, (%rbx)
 				movq %r12, 8(%rbx)				
@@ -136,7 +145,7 @@ alocaMem:
 		jmp while_loop
 	fim_while_aloca_mem:	
 			
-	movq %rbx, %rax		#retorna endr + 16
+	movq %rbx, %rax					#retorna endr + 16
 	addq $16, %rax	
 	
 	addq $8, %rsp
diff --git a/src/teste.c b/src/teste.c
index 7ca01d9..727642c 100644
--- a/src/teste.c
+++ b/src/teste.c
@@ -1,46 +1,41 @@
 #include <meu_malloc.h>
 #include <stdio.h>
 
-int main()
-{
-	void *w, *x, *y, *z;
-	
-	iniciaAlocador();
-	print_mapa();
-	printf("\n");
-	w = alocaMem(100);
-	print_mapa();
-	printf("\n");
-	x = alocaMem(200);
-	print_mapa();
-	printf("\n");
-	y = alocaMem(300);
-	print_mapa();
-	printf("\n");	
-	z = alocaMem(400);
-	print_mapa();
-	printf("\n");
-	
-	liberaMem(x);
-	print_mapa();
-	
-	x = alocaMem(50);
-	print_mapa();
-	printf("\n");
-	
-	printf("\n");
-	liberaMem(y);
-	print_mapa();
-	printf("\n");
-	liberaMem(w);
-	print_mapa();
-	printf("\n");
-	liberaMem(x);
-	print_mapa();
-	printf("\n");
-	liberaMem(z);
-	print_mapa();
-	printf("\n");
+int main () {
+	void *a,*b,*c,*d;
+
+	a=( void * ) alocaMem(1000);
+	 print_mapa();
+	printf("1\n");
+	b=( void * ) alocaMem(200);
+	 print_mapa();
+	printf("2\n");
+	c=( void * ) alocaMem(300);
+	 print_mapa();
+	printf("3\n");
+	d=( void * ) alocaMem(400);
+	 print_mapa();
+	printf("4\n");
+	liberaMem(b);
+	 print_mapa();
+	 printf("5\n");
+
+	b=( void * ) alocaMem(50);
+	 print_mapa();
+	 printf("6\n");
+
+	liberaMem(c);
+	 print_mapa();
+	printf("7\n");
+	liberaMem(a);
+	 print_mapa();
+	printf("8\n");
+	liberaMem(b);
+	 print_mapa();
+	printf("9\n");
+	liberaMem(d);
+	 print_mapa();
+	 printf("10\n");
 
 	return (0);
 }
diff --git a/teste b/teste
index a62e04207aa5ce53ce47c638b817124e16b7bbc3..df0132ad4d2865cb6d0e7bde28bb0d15e3072564 100755
GIT binary patch
delta 3505
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

delta 3327
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
Ee<6jAN&o-=

-- 
GitLab